.text
.section .rodata
.LC0:
    .string "p = %d\n"
.LC1:
    .string "ppp = %d\n"
.LC2:
    .string "*p = %hd\n"
.LC3:
    .string "***ppp = %hd\n"

.text
.globl main
.type main, @function
main:
    addi sp, sp, -32
    sd ra, 24(sp)
    sd s0, 16(sp)

    addi s0, sp, 16
    // -8(s0):p
    // -16(s0):ppp
    li a5, 10
    sd a5, -8(s0)
    ld a5, -8(s0)
    addi a5, a5, 2
    sd a5, -8(s0)
    ld a1, -8(s0)
    lui a5, %hi(.LC0)
    addi a0, a5, %lo(.LC0)
    call printf

    // 打开以下代码会段错误
    /**
    ld a5, -8(s0)
    lw a1, 0(a5)
    lui a5, %hi(.LC2)
    addi a0, a5, %lo(.LC2)
    call printf
    /**/

    li a5, 10
    // ppp
    sd a5, -16(s0)
    ld a5, -16(s0)
    addi a5, a5, 8
    sd a5, -16(s0)
    mv a1, a5
    lui a5, %hi(.LC1)
    addi a0, a5, %lo(.LC1)
    call printf

    // 打开以下代码会段错误
    /**
    ld a5, -16(s0)
    ld a5, 0(a5)
    ld a5, 0(a5)
    lh a5, 0(a5)
    sext.h a1, a5
    lui a5, %hi(.LC3)
    addi a0, a5, %lo(.LC3)
    call printf
    /**/

    mv a0, zero
    ld ra, 24(sp)
    ld s0, 16(sp)
    addi sp, sp, 32
    jr ra